/*
 * DespachoHelper.java
 *
 * Created on 13 de septiembre de 2007, 10:47 AM
 *
 * To change this template, choose Tools | Options and locate the template under
 * the Source Creation and Management node. Right-click the template and choose
 * Open. You can then make changes to the template in the Source Editor.
 */

package com.src.computec.radar.despachos.despacho.helper;

import com.src.computec.radar.base.dao.exception.DAOException;
import com.src.computec.radar.despachos.base.constantes.ConstantesGenerales;
import com.src.computec.radar.despachos.base.helper.BaseHelper;
import com.src.computec.radar.despachos.despacho.dao.BaseDespachoDAO;
import com.src.computec.radar.despachos.despacho.dto.BusquedaDto;
import com.src.computec.radar.despachos.despacho.dto.DespachoDto;
import com.src.computec.radar.despachos.despacho.dto.OrdenProcesoPorDespacharDto;
import com.src.computec.radar.despachos.despacho.exception.DespachoException;
import com.src.computec.radar.despachos.thread.FileThread;
import com.src.computec.radar.services.utilities.dto.OrdenProcesoDto;
import java.util.List;

/**
 *
 * @author aocampo
 */
public class DespachoHelper extends BaseHelper {
    
    /** Creates a new instance of DespachoHelper */
    public DespachoHelper() {
    }
    
    public DespachoDto getDespachoByPrimaryKey(DespachoDto dto) throws DespachoException {
        BaseDespachoDAO dao = (BaseDespachoDAO) this.getFactoryDAO().getDespachoDAO();
        try {
            return dao.getDespachoByPrimaryKey(dto);
        }
        catch (DAOException e) {
            throw new DespachoException("DespachoHelper:getDespachoByPrimaryKey:" + e.toString());
        }
    }
    
    public List getDespachosByBusqueda(BusquedaDto dto) throws DespachoException {
        BaseDespachoDAO dao = (BaseDespachoDAO) this.getFactoryDAO().getDespachoDAO();
        try {
            return dao.getDespachosByBusqueda(dto);
        }
        catch (DAOException e) {
            throw new DespachoException("DespachoHelper:getDespachosByBusqueda:" + e.toString());
        }
    }
    
    public List getOrdenProcesoPorDespachar(String numeroOrden) throws DespachoException {
        BaseDespachoDAO dao = (BaseDespachoDAO) this.getFactoryDAO().getDespachoDAO();
        try {
            return dao.getOrdenProcesoPorDespachar(numeroOrden);
        }
        catch (DAOException e) {
            throw new DespachoException("DespachoHelper:getOrdenProcesoPorDespachar:" + e.toString());
        }
    }
    
    // <editor-fold defaultstate="collapsed" desc="method disabled: getOrdenesProcesoPorDespachar()">
    /*public List getOrdenesProcesoPorDespachar(String daysBackStr) throws DespachoException {
        BaseDespachoDAO dao = (BaseDespachoDAO) this.getFactoryDAO().getDespachoDAO();
        try {
            return dao.getOrdenesProcesoPorDespachar(daysBackStr);
        }
        catch (DAOException e) {
            throw new DespachoException("DespachoHelper:getOrdenesProcesoPorDespachar:" + e.toString());
        }
    }*/
    // </editor-fold>
    
    public List getDetalleOrdenProcesoPorDespachar(OrdenProcesoDto dto) throws DespachoException {
        BaseDespachoDAO dao = (BaseDespachoDAO) this.getFactoryDAO().getDespachoDAO();
        try {
            return dao.getDetalleOrdenProcesoPorDespachar(dto);
        }
        catch (DAOException e) {
            throw new DespachoException("DespachoHelper:getOrdenesProcesoPorDespachar:" + e.toString());
        }
    }
    
    public String insertDespacho(DespachoDto dto, String ldapUser) throws DespachoException {
        BaseDespachoDAO dao = (BaseDespachoDAO) this.getFactoryDAO().getDespachoDAO();
        try {
            return dao.insertDespacho(dto, ldapUser);
        }
        catch (DAOException e) {
            throw new DespachoException("DespachoHelper:insertDespacho:" + e.toString());
        }
    }
    
    // <editor-fold defaultstate="collapsed" desc="method disabled: getDespachosSeleccionValidTransfer()">
    /*public List getDespachosSeleccionValidTransfer(DespachoDto dto) throws DespachoException {
        BaseDespachoDAO dao = (BaseDespachoDAO) this.getFactoryDAO().getDespachoDAO();
        try {
            return dao.getDespachosSeleccionValidTransfer(dto);
        }
        catch (DAOException e) {
            throw new DespachoException("DespachoHelper:getDespachosValidTransfer:" + e.toString());
        }
    }*/
    // </editor-fold>
    
    public boolean hasDespachar(DespachoDto dto) throws DespachoException {
        BaseDespachoDAO dao = (BaseDespachoDAO) this.getFactoryDAO().getDespachoDAO();
        try {
            return dao.hasDespachar(dto);
        }
        catch (DAOException e) {
            throw new DespachoException("DespachoHelper:hasDespachar: " + e.toString());
        }
    }
    
    public void cerrarDespacho(DespachoDto dto, List listCajas, String ldapUser) throws DespachoException {
        BaseDespachoDAO dao = (BaseDespachoDAO) this.getFactoryDAO().getDespachoDAO();
        try {
            dao.cerrarDespacho(dto, listCajas, ldapUser);
        }
        catch (DAOException e) {
            throw new DespachoException("DespachoHelper:cerrarDespacho:" + e.toString());
        }
    }
    
    public List getRemision(DespachoDto dto) throws DespachoException {
        BaseDespachoDAO dao = (BaseDespachoDAO) this.getFactoryDAO().getDespachoDAO();
        try {
            return dao.getRemision(dto);
        }
        catch (DAOException e) {
            throw new DespachoException("DespachoHelper:getRemision:" + e.toString());
        }
    }
    
    public String getEnviosByOrdenesProcesoPorDespachar(OrdenProcesoPorDespacharDto dto) throws DespachoException {
        BaseDespachoDAO dao = (BaseDespachoDAO) this.getFactoryDAO().getDespachoDAO();
        try {
            List listEnvios = dao.getEnviosByOrdenProcesoPorDespachar(dto);
            String fileName = ConstantesGenerales.RANDOM_STRING_UTILS.randomAlphanumeric(20) + ConstantesGenerales.FILE_EXTENSION;
            Thread thread = new Thread(new FileThread(FileThread.FILE_ENVIOS_ORDEN_PROCESO_POR_DESPACHAR, fileName, listEnvios));
            thread.start();
            while (thread.isAlive());
            return fileName;
        }
        catch (DAOException e) {
            throw new DespachoException("DespachoHelper:getEnviosByOrdenesProcesoPorDespachar:" + e.toString());
        }
    }
    
    // <editor-fold defaultstate="collapsed" desc="method disabled: getNumeroEnviosPorDespachar()">
    /*public int getNumeroEnviosPorDespachar(DespachoDto dto, String daysBackStr) throws DespachoException {
        BaseDespachoDAO dao = (BaseDespachoDAO) this.getFactoryDAO().getDespachoDAO();
        try {
            return dao.getNumeroEnviosPorDespachar(dto, daysBackStr);
        }
        catch (DAOException e) {
            throw new DespachoException("DespachoHelper:getNumeroEnviosPorDespachar:" + e.toString());
        }
    }*/
    // </editor-fold>
    
    public void generateLoadGestionDistribucion(OrdenProcesoPorDespacharDto dto, String ldapUser) throws DespachoException {
        BaseDespachoDAO dao = (BaseDespachoDAO) this.getFactoryDAO().getDespachoDAO();
        try {
            List listEnvios = dao.getEnviosLoadGestionByOrdenProcesoPorDespachar(dto);
            String fileName = "archivo_" + Long.toString(System.currentTimeMillis()) + "#" + ldapUser + "#" + ConstantesGenerales.CODIGO_PROVEEDOR_COMPUTEC + ConstantesGenerales.FILE_EXTENSION;
            Thread thread = new Thread(new FileThread(FileThread.FILE_LOAD_GESTION_DISTRIBUCION, fileName, listEnvios));
            thread.start();
        }
        catch (DAOException e) {
            throw new DespachoException("DespachoHelper:generateLoadGestionDistribucion:" + e.toString());
        }
    }
    
    public int calculateNroEnviosByDespachoByCaja() throws DespachoException {
        BaseDespachoDAO dao = (BaseDespachoDAO) this.getFactoryDAO().getDespachoDAO();
        try {
            return dao.calculateNroEnviosByDespachoByCaja();
        }
        catch (DAOException e) {
            throw new DespachoException("DespachoHelper:calculateNroEnviosByDespachoByCaja:" + e.toString());
        }
    }
}